using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using ZDSoft.TES.Entity.SystemEntity;
using ZDSoft.TES.Service.SystemService;
using ZDSoft.TES.Core;




namespace ZDSoft.TES.Component.SystemComponent
{
    public class SystemSettingComponent
    {
        IList<SystemFunction> systemFunctionList;
        IList<Role> roleList;
        IList<User> userList;
        /// <summary>
        /// 初始化创建（系统功能、角色、用户）
        /// </summary>
        public void InitData()
        {
            InitSystemFunction();
            InitRole();
            InitUser();
        }
        /// <summary>
        /// 初始化用户
        /// </summary>
        private void InitUser()
        {
            userList = new List<User>() 
            {
                 new User(){ Account="Admin", Password="1", UserName="Admin", IsActive=true, IsReset=false },
                 new User(){ Account="Student", Password="1", UserName="Student", IsActive=true, IsReset=false },
                 new User(){ Account="Teacher", Password="1", UserName="Teacher", IsActive=true, IsReset=false },
                 new User(){ Account="ResearchHead", Password="1", UserName="ResearchHead", IsActive=true, IsReset=false },
                 new User(){ Account="DepartmentHead", Password="1", UserName="DepartmentHead", IsActive=true, IsReset=false },
                 new User(){ Account="All", Password="1", UserName="Lion", IsActive=true, IsReset=false }
            };

            userList[0].Roles = new List<Role>();
            userList[0].Roles.Add(roleList[0]);

            userList[1].Roles = new List<Role>();
            userList[1].Roles.Add(roleList[1]);

            userList[2].Roles = new List<Role>();
            userList[2].Roles.Add(roleList[2]);

            userList[3].Roles = new List<Role>();
            userList[3].Roles.Add(roleList[3]);

            userList[4].Roles = new List<Role>();
            userList[4].Roles.Add(roleList[4]);

            userList[5].Roles = new List<Role>();
            userList[5].Roles.Add(roleList[0]);
            userList[5].Roles.Add(roleList[1]);
            userList[5].Roles.Add(roleList[2]);
            userList[5].Roles.Add(roleList[3]);
            userList[5].Roles.Add(roleList[4]);

            foreach (User user in userList)
            {
                Container.Instance.Resolve<IUserService>().Create(user);
            }
        }
        /// <summary>
        /// 初始化角色
        /// </summary>
        private void InitRole()
        {
            roleList = new List<Role>()
            {
                new Role() { RoleName="系统管理员", IsActive=true },
                new Role() { RoleName="学生", IsActive=true },
                new Role() { RoleName="教师", IsActive=true },
                new Role() { RoleName="教研室主任", IsActive=true},
                new Role() { RoleName="系主任", IsActive=true}
            };

            roleList[0].SystemFunctions = new List<SystemFunction>();
            roleList[0].SystemFunctions.Add(systemFunctionList[0]);
            roleList[0].SystemFunctions.Add(systemFunctionList[1]);
            roleList[0].SystemFunctions.Add(systemFunctionList[2]);
            roleList[0].SystemFunctions.Add(systemFunctionList[3]);
            roleList[0].SystemFunctions.Add(systemFunctionList[5]);
            roleList[1].SystemFunctions = new List<SystemFunction>();
            roleList[1].SystemFunctions.Add(systemFunctionList[0]);
            roleList[1].SystemFunctions.Add(systemFunctionList[4]);
            roleList[1].SystemFunctions.Add(systemFunctionList[5]);
            roleList[2].SystemFunctions = new List<SystemFunction>();
            roleList[2].SystemFunctions.Add(systemFunctionList[0]);
            roleList[2].SystemFunctions.Add(systemFunctionList[4]);
            roleList[2].SystemFunctions.Add(systemFunctionList[5]);
            roleList[3].SystemFunctions = new List<SystemFunction>();
            roleList[3].SystemFunctions.Add(systemFunctionList[0]);
            roleList[3].SystemFunctions.Add(systemFunctionList[4]);
            roleList[3].SystemFunctions.Add(systemFunctionList[5]);
            roleList[4].SystemFunctions = new List<SystemFunction>();
            roleList[4].SystemFunctions.Add(systemFunctionList[0]);
            roleList[4].SystemFunctions.Add(systemFunctionList[4]);
            roleList[4].SystemFunctions.Add(systemFunctionList[5]);

            foreach (Role role in roleList)
            {
                Container.Instance.Resolve<IRoleService>().Create(role);
            }
        }

        /// <summary>
        /// 初始化功能
        /// </summary>
        private void InitSystemFunction()
        {
            systemFunctionList = new List<SystemFunction>()
            {
                new SystemFunction(){ SystemFunctionName="首页", ControllerName="Home", ActionName="Index", Children=new List<SystemFunction>()},
                new SystemFunction(){ SystemFunctionName="系统管理", Children=new List<SystemFunction>()
                    {
                        new SystemFunction(){ SystemFunctionName="用户管理", ControllerName="User", ActionName="Index", Children=new List<SystemFunction>() },
                        new SystemFunction(){ SystemFunctionName="角色管理", ControllerName="Role", ActionName="Index", Children=new List<SystemFunction>() },
                        new SystemFunction(){ SystemFunctionName="系统功能管理", ControllerName="SystemFunction", ActionName="Index", Children=new List<SystemFunction>() }
                    }
                },
                new SystemFunction(){ SystemFunctionName="教学管理", Children=new List<SystemFunction>()
                    {
                        new SystemFunction(){ SystemFunctionName="机构管理", ControllerName="Organization", ActionName="Index", Children=new List<SystemFunction>() },
                        new SystemFunction(){ SystemFunctionName="课程管理", ControllerName="Course", ActionName="Index", Children=new List<SystemFunction>() }
                    }
                },
                new SystemFunction(){ SystemFunctionName="评教管理", Children=new List<SystemFunction>()
                    {
                        new SystemFunction (){ SystemFunctionName="历程管理", ActionName="Index", ControllerName="Evaluate", Children=new List<SystemFunction>() },
                        new SystemFunction (){ SystemFunctionName="指标管理", ActionName="Index", ControllerName="Quota", Children=new List<SystemFunction>() },
                        new SystemFunction (){ SystemFunctionName="规则管理", ActionName="Index", ControllerName="Rule", Children=new List<SystemFunction>() },
                        new SystemFunction (){ SystemFunctionName="题目管理", ActionName="Index", ControllerName="Question", Children=new List<SystemFunction>() },
                        new SystemFunction (){ SystemFunctionName="答案管理", ActionName="Index", ControllerName="Answer", Children=new List<SystemFunction>() },
                    }
                },
                new SystemFunction(){ SystemFunctionName="评教", Children=new List<SystemFunction>()
                    {
                        new SystemFunction (){ SystemFunctionName="开始评教", ActionName="Begin", ControllerName="Evaluate", Children=new List<SystemFunction>() }
                    }
                },
                new SystemFunction(){ SystemFunctionName="个人管理", Children=new List<SystemFunction>()
                    {
                        new SystemFunction(){ SystemFunctionName="修改密码", ControllerName="Account", ActionName="ChangePassword", Children=new List<SystemFunction>() }
                    }
                }
            };

            foreach (SystemFunction systemFunction in systemFunctionList)
            {
                Container.Instance.Resolve<ISystemFunctionService>().Create(systemFunction);
                if (systemFunction.Children != null && systemFunction.Children.Count != 0)
                {
                    foreach (SystemFunction s in systemFunction.Children)
                    {
                        Container.Instance.Resolve<ISystemFunctionService>().Create(s);
                    }
                }
            }
        }
    }
}
